iT邦幫忙

2026 iThome 鐵人賽

DAY 5
0
Software Development

30 天把舊 ERP 整合成現代微服務平台:架構治理與工程實作雙軌實戰系列 第 5

Day 05|微服務不是目標:模組化單體與混合架構怎麼選?

  • 分享至 

  • xImage
  •  

談到現代化,很容易接著想到微服務。不過,服務一拆,網路呼叫、部署、資料一致性與監控,也都要有人維護。所以我會先問:哪些功能真的需要分開修改、分開上線?

本篇名詞小筆記

  • 微服務:把系統依業務能力拆成可獨立開發、部署與維護的服務。
  • 模組化單體:仍以單一應用程式部署,但在程式內建立清楚且可檢查的模組邊界。
  • 架構測試:把套件依賴、分層或資料存取規則寫成自動化測試,防止實作偏離既定架構。
  • 強一致強一致:同一筆業務動作的多個資料異動要同時成功或同時失敗,例如出貨確認要同時扣庫存與產生應收;相對的最終一致則允許短暫落差、稍後補齊。

今天要解決的問題

我想先把拆分後的日常工作攤開來看。原本在程式裡呼叫一個方法,之後可能要透過網路;原本部署一次,之後可能要管理好幾個版本;原本一筆資料庫交易,之後也可能需要補償。把這些想清楚,再選架構,心裡會比較有底。

條件 模組化單體較適合 微服務較適合
團隊 小型、共同發佈 多團隊、能獨立負責
業務邊界 尚未穩定 邊界與責任清楚
部署需求 可共同部署 需獨立擴展與發佈
資料交易 強一致、跨模組頻繁 可接受最終一致性
維運能力 監控與自動化有限 已有成熟平台能力

下面這五項,我會一項一項確認。尤其是維運能力:監控、告警、自動部署與故障演練還沒準備好時,先把服務拆散,之後查問題可能更辛苦。

架構師視角:邊界穩定是拆分的前提

https://ithelp.ithome.com.tw/upload/images/20260917/20184230cAyTxyTSK0.png

圖 Day 05-1:架構選型決策。

如果一個功能該歸哪個模組還常常在變,例如信用額度檢查該屬於訂單還是客戶,太早把它做成獨立服務,每次搬動都得連 API 契約、兩邊部署和整合測試一起改;先留在同一個程式的模組裡,搬動只是調整程式結構,一次建置、一次測試就能驗完,成本低很多。所以我會先看邊界穩不穩定,再往下判斷。

所以,這個系列會用混合的方式來討論。高度相關、變動不多的功能,可以先保留在模組化結構;ERP 格式與介面細節,則集中到 Adapter。像訂單與庫存要一起扣帳,就先留在同一個程式;ERP 的 SOAP 欄位與狀態碼,則只在 Adapter 出現。至於哪一部分值得獨立出來,還是要依專案的需要決定。

像 ERP 介面的變動來自平台外部,集中在 Adapter 處理,就比較容易知道影響會落在哪裡。可以分開照顧穩定與仍在調整的部分,也是我喜歡這種安排的一個原因。

工程師視角:先用模組規範守住邊界

即使先維持單體,我也會把模組分工做好。資料表由誰負責、模組透過什麼介面合作、哪些呼叫不允許,都先訂清楚,再用契約與架構測試確認。之後有獨立部署、擴展或安全隔離的需要,再來評估拆分。

邊界的維護,不能只靠大家記得。所以我認為,規則能在建置時被檢查,是很重要的一步。例如跨 Schema 存取或繞過 Adapter 的程式一出現,測試就能提醒團隊。

模組之間透過明確介面合作,資料責任與同步、事件處理也先分清楚。這些準備做好,日後真的要抽成服務,就能少一些重新釐清與整理的工作。

策略取捨與限制

取捨 這樣選的理由 何時要重新評估
先維持模組化單體 邊界未穩定時,模組內調整成本遠低於跨服務調整 某模組確實需要獨立部署、擴展或安全隔離時
採混合架構而非全面微服務 只為真正需要獨立性的能力付出分散式成本 保留在單體內的模組開始互相阻擋發佈時
ERP 細節集中在單一 Adapter 變動來源在外部,集中處理才能控制影響範圍 Adapter 成為效能瓶頸,或開始累積業務規則時
用架構測試取代文件規範 文件規範會被繞過,測試會擋下建置 測試規則與實際架構決策不再一致時

業務之後會改變,保留原本的想法,才比較容易判斷現在需要調整哪裡。所以拆分時的理由與邊界假設,也一起記錄。

驗證方式與衡量指標

邊界是否合適,可以從變更紀錄檢查,不必等到出問題:

指標 計算方式 想回答的問題
每需求涉及服務數 單一需求平均變更的服務數 邊界是否切在業務會一起變動的位置?
共同部署比例 需同時部署的服務數/該次變更服務數 是否只是把單體切開,卻仍綁在一起發佈?
跨服務交易比例 需跨服務保證一致性的交易/全部交易 是否過早拆分了強一致的流程?
架構測試違規數 被架構測試擋下的違規次數 邊界規範是否仍被遵守?

如果每次改需求都要一起動到好幾個服務,我會先回來看看當初怎麼劃分。這些變更紀錄,可以幫助我們判斷,現在的邊界是不是還適合。

今天先整理到這裡

今天整理下來,我最在意的還是:這個架構,團隊能不能持續把它維護好?先把分工做清楚,也保留調整的空間。下一篇,再把這些角色放進同一張平台藍圖裡。

參考資料

  1. Microsoft Azure Architecture Center, Microservices architecture style,查閱日期:2026-09-18。
  2. Spring, Spring Modulith,查閱日期:2026-09-18。

上一篇
Day 04|漸進式現代化,還是一次重建 ERP?
下一篇
Day 06|現代化平台總體藍圖
系列文
30 天把舊 ERP 整合成現代微服務平台:架構治理與工程實作雙軌實戰7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言